<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <ul class="list">
        <li>01</li>
        <li>02</li>
        <li>03</li>
        <li>04</li>
        <li>05</li>
        <li>06</li>
        <li>07</li>
        <li>08</li>
        <li>09</li>
        <li>10</li>
    </ul>
</body>
<script>
    // 数组拓展



    // 新增数组的方法

    // 1. 数组的遍历方法
    // 2. 普通方法

    // fill()  方法使用给定值，填充一个数组
    // 返回值: 原数组
    // 是否影响原数组: 影响

    // var list = [1, 4, 7, 2, 5, 8, 3, 6, 9];

    // var result = list.fill(0);

    // 等价于
    // for (var i = 0; i < list.length; i++) {
    //     list[i] = 0;
    // }

    // console.log("返回值:", result);  //  [0, 0, 0, 0, 0, 0, 0, 0, 0]
    // console.log("原数组:", list);   // [0, 0, 0, 0, 0, 0, 0, 0, 0]


    // 纪录十盏灯的开光状态 (默认关闭   true/false)
    // var list = new Array(10).fill(false);
    // console.log(list);



    // includes()  判断数组中是否存在某个元素 
    // includes()  可以用于判断数组中是否存在NaN(indexOf不行)

    var list = [1, 4, 7, 2, NaN, 5, 8, 3, 6, 9];

    // console.log(list.includes(4));//true
    // console.log(list.includes("4"));//false

    // console.log(list.indexOf(NaN));//-1 (不存在)
    // console.log(list.includes(NaN));//true


    // 数组的扁平化
    // flat()   用于将嵌套的数组“拉平”，变成一维的数组。该方法返回一个新数组，对原数据没有影响。

    var list = [1, 2, 3, [4, 5, 6, [7, 8, 9]]]; // [1,2,3,4,5,6,7,8,9]

    // 方法1:
    // function myFlat(list) {
    //     var arr = [];
    //     for (var i = 0; i < list.length; i++) {
    //         var item = list[i];
    //         if (Array.isArray(item)) {  // [4, 5, 6, [7, 8, 9]]
    //             var newArr = myFlat(item)
    //             // arr.push(newArr);   //数组的深拷贝  (将二维数组/多维数组复制 -> 放到新数组)

    //             arr = arr.concat(newArr); // (将二维数组/多维数组的复制 -> 拼接到新数组)

    //         } else {
    //             arr.push(item);
    //         }

    //     }
    //     return arr;
    // }
    // var result = myFlat(list);
    // console.log(result);

    // 方法2:
    // var list = [1, 2, 3, [4, 5, 6, [7, 8, 9]]];
    // var arr = list.toString().split(",");
    // console.log(arr);



    // flat()   用于将嵌套的数组“拉平”，变成一维的数组。该方法返回一个新数组，对原数据没有影响
    // flat()默认只会“拉平”一层，如果想要“拉平”多层的嵌套数组，可以将flat()方法的参数写成一个整数，表示想要拉平的层数，默认为1。
    // 1. 如果是n为数组拉平为一维数组  传入n-1
    // 2. 如果不管有多少层嵌套，都要转成一维数组，可以用Infinity关键字作为参数。

    // var list = [1, 2, 3, [4, 5, 6]];
    // var result = list.flat();
    // console.log(result);

    // var list = [1, 2, 3, [4, 5, 6, [7, 8, 9]]];
    // var result = list.flat(2);
    // console.log(result);

    // var list = [1, 2, 3, [4, 5, 6, [7, 8, 9, [10, [11, [12, [13, [14, [15]]]]]]]]];
    // var result = list.flat(Infinity);
    // console.log(result);



    // flatMap()  可以理解为map和flat的组合版  => 先根据原数组得到一个新数组,在对新数组进行拉平处理

    var list = [1, 4, 7, 2, 5, 8, 3, 6, 9];


    // var arr = list.map(function (item) {  // 先根据原数组得到一个新数组
    //     return [item, item * 10];  // [本身,本身*10]
    // })
    // console.log(arr);

    // var result = arr.flat();  //在对新数组进行拉平处理
    // console.log(result);


    // var result = list.flatMap(function (item) {  // 先根据原数组得到一个新数组,在对新数组进行拉平处理
    //     return [item, item * 10];  // [本身,本身*10]
    // })
    // console.log(result);


    // at(index) 传入一个下标,返回对应下标的元素
    var list = [1, 4, 7, 2, 5, 8, 3, 6, 9];

    console.log(list.at(0)); // list[0]
    console.log(list.at(4)); // list[4]

    console.log(list.at(-1)); // list[list.length-1]
    console.log(list.at(-4)); // list[list.length-4]



















</script>

</html>